Teams message card templates

Example templates are provided that helps you to create message cards to use with MS Teams integration.

About this task

Message layouts are available for the following events:You can customize these available message card as per your team requirement. See MS Teams documentation for more information.

Application Deployment Failure JSON body

## PROPERTY Content-Type: application/json

#set ( $Q = '\\"' )

#set ( $themeColor = "#E88686" )
#set ( $warningCount = $workflowTrace.WarningCount)

#macro (showSummary $analysis $level )
  #set ($indentPixels = $level * 20)
  #set ($trace = $analysis.Trace)

  #set ( $text = "${text} <tr>" )
  #set ( $text = "${text} <td style=${Q}padding-left: ${indentPixels}px;${Q}>$trace.Name</td><td>" )
  #set ($activityResource = $trace.getPropertyValue("activity.resource.id"))
  #if ($activityResource)
    #set ( $text = "${text} $resourceFactory.getResourceForId($fn.getUUID($activityResource)).Path" )
  #else
    #set ( $text = "${text} $trace.getPropertyValue(\"resourcePath\")" )
  #end
  #set ( $text = "${text} </td><td>" )
  #if ($trace.StartedOn)
    #set ( $text = "${text} $fn.formatDate($trace.StartedOn)" )
  #else
    #set ( $text = "${text} Activity not started" )
  #end
  #set ( $text = "${text} </td><td>" )
  #if ($trace.StartedOn && $trace.EndedOn)
    #set ( $text = "${text} $fn.duration($trace.StartedOn, $trace.EndedOn)s" )
  #end
  #set ( $text = "${text} </td><td>$fn.getStatusDisplayName($trace.Result)</td>" )
  #set ( $text = "${text} </tr>" )
  #foreach ($child in $analysis.Children)
    #set ($nextLevel = $level + 1)
    #showSummary ($child, $nextLevel)
  #end
#end

 #macro (showFailure $analysis $level)
   #set ($indentPixels = $level * 20)
   #set ( $text = "${text} <tr background-color=${Q}white${Q}><td style=${Q}padding-left: ${indentPixels}px; font-weight: bold; color: #A84F4F${Q}>$analysis.Trace.Name </td></tr>" )
   #if ($analysis.Children.isEmpty())
     #set ($indentPixels = $indentPixels + 20)
     #set ( $text = "${text} <td style=${Q}padding-left: ${indentPixels}px; white-space: pre-wrap${Q}>$analysis.FailureMessage</td>" )
   #end
   #foreach ($child in $analysis.Children)
     #set ($nextLevel = $level + 1)
     #showFailure ($child, $nextLevel)
   #end
 #end



#set( $text = "" )
#set( $text = "${text} <h2>A process on $application.Name started</h2>" )
#set( $text = "${text} <table> " )
#set( $text = "${text}   <tr><td>Application:</td><td>$application.Name</td></tr>" )
#set( $text = "${text}   <tr><td>Process:</td><td>$applicationProcess.Name</td></tr>" )
#if ($snapshot)
  #set( $text = " ${text} <tr><td>Snapshot:</td><td>$snapshot.Name</td></tr>" )
#end
#set( $text = "${text}   <tr><td>Environment:</td><td>$environment.Name</td></tr>" )
#set( $text = "${text}   <tr><td>Requested by:</td><td>$user.Name</td></tr>" )
#set( $text = "${text}   <tr><td>Requested on:</td><td>$fn.formatDate(${request.SubmittedDate})</td></tr>" )
#if (! $request.Description.isEmpty())
    #set( $text = "${text}   <tr><td>Description:</td><td>${request.Description}</td></tr>" )
#end
#set( $text = "${text}   <tr><td>Warning Count:</td><td>${workflowTrace.WarningCount}</td></tr>" )
#if ($workflowTrace.ChildWarningMessages)
  #set( $text = " ${text} <tr><td>Warnings:</td><td><ul>" )
  #foreach ($message in $workflowTrace.ChildWarningMessages )
    #set ($messageOverLimit = $message.length() > 100)
    #if ($messageOverLimit)
      #set ( $text = "${text} <li>$message.substring(0,100)...</li>" )
    #else
      #set ( $text = "${text} <li>$message</li>" )
    #end
    #set ($remainingWarnings = $warningCount - $workflowTrace.ChildWarningMessages.size())
    #if ($remainingWarnings > 0)
      #set ( $text = "${text} <li>+ $remainingWarnings From Child Workflows</li>" )
    #end
  #end
  #set( $text = " ${text} </ul></td></tr>" )
#end
#set( $text = "${text} </table>" )

#set( $text = " ${text} <div>" )
#set( $text = " ${text} <h3>Process summary:</h3>" )
#set( $text = " ${text} <table cellpadding=${Q}4${Q} cellspacing=${Q}1${Q} width=${Q}100%${Q}>" )
#set( $text = " ${text}  <thead>" )
#set( $text = " ${text}     <th style=${Q}text-align:left;${Q}>Process</th>" )
#set( $text = " ${text}     <th style=${Q}text-align:left;${Q}>Resource</th>" )
#set( $text = " ${text}     <th style=${Q}text-align:left;${Q}>Start</th>" )
#set( $text = " ${text}     <th style=${Q}text-align:left;${Q}>Duration</th>" )
#set( $text = " ${text}     <th style=${Q}text-align:left;${Q}>Status</th>" )
#set( $text = " ${text}  </thead>" )
#set( $text = " ${text}  <tbody>" )
  #foreach ($child in $analysis.RootAnalyses)
    #showSummary ($child 0)
  #end
#set( $text = " ${text}  </tbody>" )
#set( $text = " ${text} </table>" )
#set( $text = " ${text} </div>" )

#set( $text = " ${text} <div><h3>Failure details:</h3>" )
#set( $text = " ${text}   <table cellpadding=${Q}2${Q} cellspacing=${Q}1${Q} width=${Q}100%${Q}>" )
#set( $text = " ${text}     <table-body>" )
                              #foreach ($child in $failureAnalysis.RootAnalyses)
                                #showFailure ($child 0)
                              #end
#set( $text = " ${text}  </tbody>" )
#set( $text = " ${text} </table>" )
#set( $text = " ${text} </div>" )


#set( $text = " ${text} <div>" )
#if ($versions.size() > 0)
  #set( $text = " ${text} <h3>Included versions</h3>" )
  #set( $text = " ${text} <table cellpadding=${Q}4${Q} cellspacing=${Q}1${Q} width=${Q}100%${Q}>" )
   #set( $text = " ${text} <thead>" )
      #set( $text = " ${text} <th style=${Q}text-align:left;${Q}>Component</th>" )
      #set( $text = " ${text} <th style=${Q}text-align:left;${Q}>Version</th>" )
      #set( $text = " ${text} <th style=${Q}text-align:left;${Q}>Description</th>" )
   #set( $text = " ${text} </thead>" )
   #set( $text = " ${text} <tbody>" )
    #foreach ($version in $versions)
      #set( $text = " ${text} <tr>" )
       #set( $text = " ${text} <td>$version.Component.Name</td>" )
       #set( $text = " ${text} <td>$version.Name</td>" )
       #set( $text = " ${text} <td>$version.Description</td>" )
     #set( $text = " ${text} </tr>" )
    #end
#set( $text = " ${text}    </tbody>" )
#set( $text = " ${text}   </table>" )
#else
#set( $text = " ${text}   <h3>No versions included</h3>" )
#end
#set( $text = " ${text} </div>" )

#set( $text = "${text} <br>Click <strong>View Details</strong> for more information." )


{
    "@context": "https://schema.org/extensions",
    "@type": "MessageCard",
    "themeColor": "$themeColor",
    "title": "A process on $fn.escapeJson($application.Name) failed",
    "text": "$fn.escapeJson($text).trim()",
    "potentialAction": [
        {
            "@type": "OpenUri",
            "name": "View Details",
            "targets": [
                {
                    "os": "default",
                    "uri": "$fn.escapeJson($externalUrl)#applicationProcessRequest/${request.Id}"
                }
            ]
        }
    ]
}

Application Deployment Success JSON body

## PROPERTY Content-Type: application/json

#set ( $Q = '\\"' )

#set ( $themeColor = "#0072c6" )
#set ( $warningCount = $workflowTrace.WarningCount)

#macro (showSummary $analysis $level )
  #set ($indentPixels = $level * 20)
  #set ($trace = $analysis.Trace)

  #set ( $text = "${text} <tr>" )
  #set ( $text = "${text} <td style=${Q}padding-left: ${indentPixels}px;${Q}>$trace.Name</td><td>" )
  #set ($activityResource = $trace.getPropertyValue("activity.resource.id"))
  #if ($activityResource)
    #set ( $text = "${text} $resourceFactory.getResourceForId($fn.getUUID($activityResource)).Path" )
  #else
    #set ( $text = "${text} $trace.getPropertyValue(\"resourcePath\")" )
  #end
  #set ( $text = "${text} </td><td>" )
  #if ($trace.StartedOn)
    #set ( $text = "${text} $fn.formatDate($trace.StartedOn)" )
  #else
    #set ( $text = "${text} Activity not started" )
  #end
  #set ( $text = "${text} </td><td>" )
  #if ($trace.StartedOn && $trace.EndedOn)
    #set ( $text = "${text} $fn.duration($trace.StartedOn, $trace.EndedOn)s" )
  #end
  #set ( $text = "${text} </td><td style=${Q}background-color: $fn.getStatusColor($trace.Result)${Q}>$fn.getStatusDisplayName($trace.Result)</td>" )
  #set ( $text = "${text} </tr>" )
  #foreach ($child in $analysis.Children)
    #set ($nextLevel = $level + 1)
    #showSummary ($child, $nextLevel)
  #end
#end


#set( $text = "" )
#set( $text = "${text} <h2>A process on $application.Name started</h2>" )
#set( $text = "${text} <table> " )
#set( $text = "${text}   <tr><td>Application:</td><td>$application.Name</td></tr>" )
#set( $text = "${text}   <tr><td>Process:</td><td>$applicationProcess.Name</td></tr>" )
#if ($snapshot)
  #set( $text = " ${text} <tr><td>Snapshot:</td><td>$snapshot.Name</td></tr>" )
#end
#set( $text = "${text}   <tr><td>Environment:</td><td>$environment.Name</td></tr>" )
#set( $text = "${text}   <tr><td>Requested by:</td><td>$user.Name</td></tr>" )
#set( $text = "${text}   <tr><td>Requested on:</td><td>$fn.formatDate(${request.SubmittedDate})</td></tr>" )
#if (! $request.Description.isEmpty())
#set( $text = "${text}   <tr><td>Description:</td><td>${request.Description}</td></tr>" )
#end
#set( $text = "${text}   <tr><td>Warning Count:</td><td>${workflowTrace.WarningCount}</td></tr>" )
#if ($workflowTrace.ChildWarningMessages)
  #set( $text = " ${text} <tr><td>Warnings:</td><td><ul>" )
  #foreach ($message in $workflowTrace.ChildWarningMessages )
    #set ($messageOverLimit = $message.length() > 100)
    #if ($messageOverLimit)
      #set ( $text = "${text} <li>$message.substring(0,100)...</li>" )
    #else
      #set ( $text = "${text} <li>$message</li>" )
    #end
    #set ($remainingWarnings = $warningCount - $workflowTrace.ChildWarningMessages.size())
    #if ($remainingWarnings > 0)
      #set ( $text = "${text} <li>+ $remainingWarnings From Child Workflows</li>" )
    #end
  #end
  #set( $text = " ${text} </ul></td></tr>" )
#end
#set( $text = "${text} </table>" )

#set( $text = " ${text} <div>" )
#set( $text = " ${text} <h3>Process summary:</h3>" )
#set( $text = " ${text} <table cellpadding=${Q}4${Q} cellspacing=${Q}1${Q} width=${Q}100%${Q}>" )
#set( $text = " ${text}  <thead>" )
#set( $text = " ${text}     <th style=${Q}text-align:left;${Q}>Process</th>" )
#set( $text = " ${text}     <th style=${Q}text-align:left;${Q}>Resource</th>" )
#set( $text = " ${text}     <th style=${Q}text-align:left;${Q}>Start</th>" )
#set( $text = " ${text}     <th style=${Q}text-align:left;${Q}>Duration</th>" )
#set( $text = " ${text}     <th style=${Q}text-align:left;${Q}>Status</th>" )
#set( $text = " ${text}  </thead>" )
#set( $text = " ${text}  <tbody>" )
  #foreach ($child in $analysis.RootAnalyses)
    #showSummary ($child 0)
  #end
#set( $text = " ${text}  </tbody>" )
#set( $text = " ${text} </table>" )
#set( $text = " ${text} </div>" )

#set( $text = " ${text} <div>" )
#if ($versions.size() > 0)
  #set( $text = " ${text} <h3>Included versions</h3>" )
  #set( $text = " ${text} <table cellpadding=${Q}4${Q} cellspacing=${Q}1${Q} width=${Q}100%${Q}>" )
   #set( $text = " ${text} <thead>" )
      #set( $text = " ${text} <th style=${Q}text-align:left;${Q}>Component</th>" )
      #set( $text = " ${text} <th style=${Q}text-align:left;${Q}>Version</th>" )
      #set( $text = " ${text} <th style=${Q}text-align:left;${Q}>Description</th>" )
   #set( $text = " ${text} </thead>" )
   #set( $text = " ${text} <tbody>" )
    #foreach ($version in $versions)
      #set( $text = " ${text} <tr>" )
       #set( $text = " ${text} <td>$version.Component.Name</td>" )
       #set( $text = " ${text} <td>$version.Name</td>" )
       #set( $text = " ${text} <td>$version.Description</td>" )
     #set( $text = " ${text} </tr>" )
    #end
#set( $text = " ${text}    </tbody>" )
#set( $text = " ${text}   </table>" )
#else
#set( $text = " ${text}   <h3>No versions included</h3>" )
#end
#set( $text = " ${text} </div>" )

#set( $text = "${text} <br>Click <strong>View Details</strong> for more information." )


{
    "@context": "https://schema.org/extensions",
    "@type": "MessageCard",
    "themeColor": "$themeColor",
    "title": "A process on $fn.escapeJson($application.Name) completed successfully",
    "text": "$fn.escapeJson($text).trim()",
    "potentialAction": [
        {
            "@type": "OpenUri",
            "name": "View Details",
            "targets": [
                {
                    "os": "default",
                    "uri": "$fn.escapeJson($externalUrl)#applicationProcessRequest/${request.Id}"
                }
            ]
        }
    ]
}

Application Process Request Started JSON body

## PROPERTY Content-Type: application/json

#set ( $themeColor = "#0072c6" )

#set( $text = "" )
#set( $text = "${text} <h2>A process on $application.Name started</h2>" )
#set( $text = "${text} <table> " )
#set( $text = "${text}   <tr><td>Application:</td><td>$application.Name</td></tr>" )
#set( $text = "${text}   <tr><td>Process:</td><td>$applicationProcess.Name</td></tr>" )
#if ($snapshot)
  #set( $text = " ${text} <tr><td>Snapshot:</td><td>$snapshot.Name</td></tr>" )
#end
#set( $text = "${text}   <tr><td>Environment:</td><td>$environment.Name</td></tr>" )
#set( $text = "${text}   <tr><td>Requested by:</td><td>$user.Name</td></tr>" )
#set( $text = "${text}   <tr><td>Requested on:</td><td>$fn.formatDate(${request.SubmittedDate})</td></tr>" )
#set( $text = "${text} </table>" )
#set( $text = "${text} <br>Click <strong>View Details</strong> for more information." )
{
    "@context": "https://schema.org/extensions",
    "@type": "MessageCard",
    "themeColor": "$themeColor",
    "title": "A process on $fn.escapeJson($application.Name) started",
    "text": "$fn.escapeJson($text).trim()",
    "potentialAction": [
        {
            "@type": "OpenUri",
            "name": "View Details",
            "targets": [
                {
                    "os": "default",
                    "uri": "$fn.escapeJson($externalUrl)#applicationProcessRequest/${request.Id}"
                }
            ]
        }
    ]
}

Approval Completed JSON body

## PROPERTY Content-Type: application/json


#set ( $themeColor = "#0072C6" )
#if ( $appRequest )
    #set ( $processName = $appRequest.getApplicationProcess().getName() )
#end
#if ( $compRequest )
    #set ( $processName = $compRequest.getComponentProcess().getName() )
#end

#set( $text = "" )
#set( $text = "${text} <h2>HCL Launch Process: $processName</h2>" )
#set( $text = "${text} <table> " )
#set( $text = "${text}   <tr><td>Application:</td><td>${application.Name}</td></tr>" )
#set( $text = "${text}   <tr><td>Environment:</td><td>${environment.Name}</td></tr>" )
#if ($snapshot)
  #set( $text = "${text} <tr><td>Snapshot:</td><td>${snapshot.Name}</td></tr>" )
#end
#set( $text = "${text}   <tr><td>Requested by:</td><td>${requester.Name}</td></tr>" )
#set( $text = "${text}   <tr><td>Scheduled for:</td><td>${scheduledDate}</td></tr>" )
#if (!$appRequest.getDescription().isEmpty())
#set( $text = "${text}   <tr><td>Description:</td><td>${appRequest.getDescription()}</td></tr>" )
#end
#set( $text = "${text} </table>" )
#set( $text = "${text} <br>Click <strong>View Details</strong> for more information." )
{
    "@context": "https://schema.org/extensions",
    "@type": "MessageCard",
    "themeColor": "$themeColor",
    "title": "An approval was completed for the $fn.escapeJson($application.Name) application on the $fn.escapeJson($environment.Name) environment",
    "text": "$fn.escapeJson($text).trim()",
    "potentialAction": [
        {
            "@type": "OpenUri",
            "name": "View Details",
            "targets": [
                {
                    "os": "default",
                    "uri": "$fn.escapeJson($externalUrl)#$requestType/$processId"
                }
            ]
        }
    ]
}

Approval Failed JSON body

## PROPERTY Content-Type: application/json

#set( $themeColor = "#E88686" )
#if ( $appRequest )
    #set ( $processName = $appRequest.getApplicationProcess().getName() )
#end
#if ( $compRequest )
    #set ( $processName = $compRequest.getComponentProcess().getName() )
#end

#set( $text = "" )
#set( $text = "${text} <h2>HCL Launch Process $processName was rejected during its approval process</h2>" )
#set( $text = "${text} <table> " )
#set( $text = "${text}   <tr><td>Application:</td><td>${application.Name}</td></tr>" )
#set( $text = "${text}   <tr><td>Environment:</td><td>${environment.Name}</td></tr>" )
#if ($snapshot)
  #set( $text = "${text} <tr><td>Snapshot:</td><td>${snapshot.Name}</td></tr>" )
#end
#set( $text = "${text}   <tr><td>Requested by:</td><td>${requester.Name}</td></tr>" )
#set( $text = "${text}   <tr><td>Scheduled for:</td><td>${scheduledDate}</td></tr>" )
#if (!$appRequest.getDescription().isEmpty())
#set( $text = "${text}   <tr><td>Description:</td><td>${appRequest.getDescription()}</td></tr>" )
#end
#set( $text = "${text} </table>" )
#set( $text = "${text} <br>Click <strong>View Details</strong> for more information." )
{
    "@context": "https://schema.org/extensions",
    "@type": "MessageCard",
    "themeColor": "$themeColor",
    "title": "An approval failed for the $fn.escapeJson($application.Name) application on the $fn.escapeJson($environment.Name) environment",
    "text": "$fn.escapeJson($text).trim()",
    "potentialAction": [
        {
            "@type": "OpenUri",
            "name": "View Details",
            "targets": [
                {
                    "os": "default",
                    "uri": "$fn.escapeJson($externalUrl)#$requestType/$processId"
                }
            ]
        }
    ]
}

External Approval Completed JSON body

## PROPERTY Content-Type: application/json

#set( $themeColor = "#0072C6")
#if ( $appProcRequest )
    #set ( $description = $appProcRequest.getDescription() )
#end
#if ( $compProcRequest )
    #set ( $description = $compProcRequest.getDescription() )
#end

#set( $text = "" )
#set( $text = "${text} <h2>An external approval process was successful</h2>" )
#set( $text = "${text} <table> " )
#set( $text = "${text}   <tr><td>Application:</td><td>${application.Name}</td></tr>" )
#set( $text = "${text}   <tr><td>Environment:</td><td>${environment.Name}</td></tr>" )
#if ($snapshot)
  #set( $text = "${text} <tr><td>Snapshot:</td><td>${snapshot.Name}</td></tr>" )
#end
#set( $text = "${text}   <tr><td>Requested by:</td><td>${requester.Name}</td></tr>" )
#set( $text = "${text}   <tr><td>Scheduled for:</td><td>${scheduledDate}</td></tr>" )
#if ($description && !$description.isEmpty())
#set( $text = "${text}   <tr><td>Description:</td><td>${description}</td></tr>" )
#end
#set( $text = "${text} </table>" )
#set( $text = "${text} <br>Click <strong>View Details</strong> for more information." )
{
    "@context": "https://schema.org/extensions",
    "@type": "MessageCard",
    "themeColor": "$themeColor",
    "title": "An external approval was completed for the $fn.escapeJson($application.Name) application on the $fn.escapeJson($environment.Name) environment",
    "text": "$fn.escapeJson($text).trim()",
    "potentialAction": [
        {
            "@type": "OpenUri",
            "name": "View Details",
            "targets": [
                {
                    "os": "default",
                    "uri": "$fn.escapeJson($externalUrl)#$requestType/$processId"
                }
            ]
        }
    ]
}

External Approval Failed JSON body

## PROPERTY Content-Type: application/json

#set( $themeColor = "#E88686" )
#if ( $appProcRequest )
    #set ( $description = $appProcRequest.getDescription() )
#end
#if ( $compProcRequest )
    #set ( $description = $compProcRequest.getDescription() )
#end

#set( $text = "" )
#set( $text = "${text} <h2>An application process was rejected during its external approval process</h2>" )
#set( $text = "${text} <table> " )
#set( $text = "${text}   <tr><td>Application:</td><td>${application.Name}</td></tr>" )
#set( $text = "${text}   <tr><td>Environment:</td><td>${environment.Name}</td></tr>" )
#if ($snapshot)
  #set( $text = "${text} <tr><td>Snapshot:</td><td>${snapshot.Name}</td></tr>" )
#end
#set( $text = "${text}   <tr><td>Requested by:</td><td>${requester.Name}</td></tr>" )
#set( $text = "${text}   <tr><td>Scheduled for:</td><td>${scheduledDate}</td></tr>" )
#if ($description && !$description.isEmpty())
#set( $text = "${text}   <tr><td>Description:</td><td>${description}</td></tr>" )
#end
#set( $text = "${text} </table>" )
#set( $text = "${text} <br>Click <strong>View Details</strong> for more information." )
{
    "@context": "https://schema.org/extensions",
    "@type": "MessageCard",
    "themeColor": "$themeColor",
    "title": "An external approval failed for the $fn.escapeJson($application.Name) application on the $fn.escapeJson($environment.Name) environment",
    "text": "$fn.escapeJson($text)",
    "potentialAction": [
        {
            "@type": "OpenUri",
            "name": "View Details",
            "targets": [
                {
                    "os": "default",
                    "uri": "$fn.escapeJson($externalUrl)#$requestType/$processId"
                }
            ]
        }
    ]
}

Generic Process Completed JSON body

## PROPERTY Content-Type: application/json

#set( $themeColor = $fn.getStatusColor( $request.Result ) )
#if ( $themeColor.contains("#FFFFFF") )
  #set ( $themeColor = "#0072C6" )
#end

#set( $text = "" )
#set( $text = "${text} <h2>HCL Launch Process $process.Name $fn.getStatusDisplayName($request.Result)</h2>" )
#set( $text = "${text} <table> " )
#set( $text = "${text}   <tr><td>Process:</td><td>$process.Name</td></tr>" )
#if ($resourceName)
  #set( $text = " ${text} <tr><td>Resource:</td><td>$resourceName</td></tr>" )
#end
#set( $text = "${text}   <tr><td>Requested by:</td><td>$user.Name</td></tr>" )
#set( $text = "${text}   <tr><td>Requested on:</td><td>$scheduledDate</td></tr>" )
#set( $text = "${text} </table>" )
#set( $text = "${text} <br>Click <strong>View Details</strong> for more information" )
{
    "@context": "https://schema.org/extensions",
    "@type": "MessageCard",
    "themeColor": "$themeColor",
    "title": "HCL Launch Process $fn.escapeJson($process.Name) $fn.getStatusDisplayName($request.Result)",
    "text": "$fn.escapeJson($text).trim()",
    "potentialAction": [
        {
            "@type": "OpenUri",
            "name": "View Details",
            "targets": [
                {
                    "os": "default",
                    "uri": "$fn.escapeJson($externalUrl)#$requestType/$processId"
                }
            ]
        }
    ]
}

Generic Process Request Started JSON body

## PROPERTY Content-Type: application/json

#set ( $themeColor = "#0072c6" )

#set( $text = "" )
#set( $text = "${text} <h2>HCL Launch Process $process.Name started</h2>" )
#set( $text = "${text} <table> " )
#set( $text = "${text}   <tr><td>Process:</td><td>$process.Name</td></tr>" )
#if ($resourceName)
  #set( $text = " ${text} <tr><td>Resource:</td><td>$resourceName</td></tr>" )
#end
#set( $text = " ${text}   <tr><td>Requested by:</td><td>$user.Name</td></tr>" )
#set( $text = " ${text}   <tr><td>Requested on:</td><td>$scheduledDate</td></tr>" )
#set( $text = " ${text} </table>" )
#set( $text = "${text} <br>Click <strong>View Details</strong> for more information" )
{
    "@context": "https://schema.org/extensions",
    "@type": "MessageCard",
    "themeColor": "$themeColor",
    "title": "HCL Launch Process $fn.escapeJson($process.Name) started",
    "text": "$fn.escapeJson($text).trim()",
    "potentialAction": [
        {
            "@type": "OpenUri",
            "name": "View Details",
            "targets": [
                {
                    "os": "default",
                    "uri": "$fn.escapeJson($externalUrl)#$requestType/$processId"
                }
            ]
        }
    ]
}

Scheduled Process Not Started JSON body

## PROPERTY Content-Type: application/json

#set ( $themeColor = "#E88686" )

#set( $text = "" )
#set( $text = "${text} <h2>HCL Launch Process $process.Name failed to start</h2>" )
#set( $text = "${text} <table> " )
#set( $text = "${text}   <tr><td>Process:</td><td>$process.Name</td></tr>" )
#if ($resourceName)
  #set( $text = " ${text} <tr><td>Resource:</td><td>$resourceName</td></tr>" )
#end
#set( $text = " ${text}   <tr><td>Requested by:</td><td>$user.Name</td></tr>" )
#set( $text = " ${text}   <tr><td>Requested on:</td><td>$scheduledDate</td></tr>" )
#set( $text = " ${text} </table>" )
#set( $text = " ${text} <br>The process failed to start because the server is in maintenance mode. You can request the process again when maintenance is complete." )
#set( $text = "${text} <br>Click <strong>View Details</strong> for more information." )
{
    "@context": "https://schema.org/extensions",
    "@type": "MessageCard",
    "themeColor": "$themeColor",
    "title": "HCL Launch Process $fn.escapeJson($process.Name) failed to start",
    "text": "$fn.escapeJson($text).trim()",
    "potentialAction": [
        {
            "@type": "OpenUri",
            "name": "View Details",
            "targets": [
                {
                    "os": "default",
                    "uri": "$fn.escapeJson($externalUrl)#$requestType/$processId"
                }
            ]
        }
    ]
}